package com.hello.system.domain;

import java.math.BigDecimal;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 设备产品（商城）对象 rental_device_products
 * 
 * @author hello
 * @date 2025-08-06
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class RentalDeviceProducts extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 产品ID */
    private Long productId;

    /** 产品编码（唯一标识） */
    @Excel(name = "产品编码", readConverterExp = "唯=一标识")
    private String productCode;

    /** 产品名称 */
    @Excel(name = "产品名称")
    private String productName;

    /** 分类ID */
    @Excel(name = "分类ID")
    private Long categoryId;

    /** 品牌 */
    @Excel(name = "品牌")
    private String brand;

    /** 型号 */
    @Excel(name = "型号")
    private String model;

    /** 产品类型：standard-标准产品，custom-定制产品 */
    @Excel(name = "产品类型：standard-标准产品，custom-定制产品")
    private String productType;

    /** 规格参数（JSON格式） */
    @Excel(name = "规格参数", readConverterExp = "J=SON格式")
    private String specifications;

    /** 产品描述 */
    @Excel(name = "产品描述")
    private String description;

    /** 产品特色功能（JSON格式） */
    @Excel(name = "产品特色功能", readConverterExp = "J=SON格式")
    private String features;

    /** 主图片 */
    @Excel(name = "主图片")
    private String mainImage;

    /** 产品图片集（JSON格式） */
    @Excel(name = "产品图片集", readConverterExp = "J=SON格式")
    private String images;

    /** 产品视频（JSON格式） */
    @Excel(name = "产品视频", readConverterExp = "J=SON格式")
    private String videos;

    /** 商城标题（用于SEO优化） */
    @Excel(name = "商城标题", readConverterExp = "用=于SEO优化")
    private String marketTitle;

    /** 商城副标题 */
    @Excel(name = "商城副标题")
    private String marketSubtitle;

    /** 标签（JSON格式，用于搜索） */
    @Excel(name = "标签", readConverterExp = "J=SON格式，用于搜索")
    private String tags;

    /** 关键词（用于搜索） */
    @Excel(name = "关键词", readConverterExp = "用=于搜索")
    private String keywords;

    /** 基础日租金 */
    @Excel(name = "基础日租金")
    private BigDecimal baseDailyRent;

    /** 基础押金 */
    @Excel(name = "基础押金")
    private BigDecimal baseDeposit;

    /** 最少租赁天数 */
    @Excel(name = "最少租赁天数")
    private Long minRentDays;

    /** 最多租赁天数 */
    @Excel(name = "最多租赁天数")
    private Long maxRentDays;

    /** 折扣规则（JSON格式：长租优惠等） */
    @Excel(name = "折扣规则", readConverterExp = "J=SON格式：长租优惠等")
    private String discountRules;

    /** 一口价（直接购买价格） */
    @Excel(name = "一口价", readConverterExp = "直=接购买价格")
    private BigDecimal buyPrice;

    /** 是否支持购买：0-仅租赁，1-支持购买 */
    @Excel(name = "是否支持购买：0-仅租赁，1-支持购买")
    private Integer isBuyable;

    /** 总库存数量 */
    @Excel(name = "总库存数量")
    private Long totalStock;

    /** 可用库存 */
    @Excel(name = "可用库存")
    private Long availableStock;

    /** 预留库存 */
    @Excel(name = "预留库存")
    private Long reservedStock;

    /** 最低库存警告 */
    @Excel(name = "最低库存警告")
    private Long minStockAlert;

    /** 产品状态：0-下架，1-上架，2-预售，3-缺货，4-停产 */
    @Excel(name = "产品状态：0-下架，1-上架，2-预售，3-缺货，4-停产")
    private Integer status;

    /** 销售状态：0-暂停销售，1-正常销售，2-限量销售 */
    @Excel(name = "销售状态：0-暂停销售，1-正常销售，2-限量销售")
    private Integer saleStatus;

    /** 审核状态：0-待审核，1-审核通过，2-审核拒绝 */
    @Excel(name = "审核状态：0-待审核，1-审核通过，2-审核拒绝")
    private Integer auditStatus;

    /** 配送方式（JSON格式） */
    @Excel(name = "配送方式", readConverterExp = "J=SON格式")
    private String deliveryMethods;

    /** 服务区域（JSON格式） */
    @Excel(name = "服务区域", readConverterExp = "J=SON格式")
    private String serviceAreas;

    /** 售后服务说明 */
    @Excel(name = "售后服务说明")
    private String afterSalesService;

    /** 保险信息 */
    @Excel(name = "保险信息")
    private String insuranceInfo;

    /** 质量等级：A-全新，B-99新，C-95新，D-90新 */
    @Excel(name = "质量等级：A-全新，B-99新，C-95新，D-90新")
    private String qualityGrade;

    /** 质保期（天） */
    @Excel(name = "质保期", readConverterExp = "天=")
    private Long warrantyPeriod;

    /** 保养周期（天） */
    @Excel(name = "保养周期", readConverterExp = "天=")
    private Long maintenanceCycle;

    /** 浏览次数 */
    @Excel(name = "浏览次数")
    private Long viewCount;

    /** 下单次数 */
    @Excel(name = "下单次数")
    private Long orderCount;

    /** 租赁次数 */
    @Excel(name = "租赁次数")
    private Long rentCount;

    /** 收藏次数 */
    @Excel(name = "收藏次数")
    private Long favoriteCount;

    /** 平均评分 */
    @Excel(name = "平均评分")
    private BigDecimal avgRating;

    /** 评价数量 */
    @Excel(name = "评价数量")
    private Long reviewCount;

    /** 供应商ID */
    @Excel(name = "供应商ID")
    private Long supplierId;

    /** 供应商名称 */
    @Excel(name = "供应商名称")
    private String supplierName;

    /** 供应商产品编码 */
    @Excel(name = "供应商产品编码")
    private String supplierProductCode;

    public void setProductId(Long productId) 
    {
        this.productId = productId;
    }

    public Long getProductId() 
    {
        return productId;
    }
    public void setProductCode(String productCode) 
    {
        this.productCode = productCode;
    }

    public String getProductCode() 
    {
        return productCode;
    }
    public void setProductName(String productName) 
    {
        this.productName = productName;
    }

    public String getProductName() 
    {
        return productName;
    }
    public void setCategoryId(Long categoryId) 
    {
        this.categoryId = categoryId;
    }

    public Long getCategoryId() 
    {
        return categoryId;
    }
    public void setBrand(String brand) 
    {
        this.brand = brand;
    }

    public String getBrand() 
    {
        return brand;
    }
    public void setModel(String model) 
    {
        this.model = model;
    }

    public String getModel() 
    {
        return model;
    }
    public void setProductType(String productType) 
    {
        this.productType = productType;
    }

    public String getProductType() 
    {
        return productType;
    }
    public void setSpecifications(String specifications) 
    {
        this.specifications = specifications;
    }

    public String getSpecifications() 
    {
        return specifications;
    }
    public void setDescription(String description) 
    {
        this.description = description;
    }

    public String getDescription() 
    {
        return description;
    }
    public void setFeatures(String features) 
    {
        this.features = features;
    }

    public String getFeatures() 
    {
        return features;
    }
    public void setMainImage(String mainImage) 
    {
        this.mainImage = mainImage;
    }

    public String getMainImage() 
    {
        return mainImage;
    }
    public void setImages(String images) 
    {
        this.images = images;
    }

    public String getImages() 
    {
        return images;
    }
    public void setVideos(String videos) 
    {
        this.videos = videos;
    }

    public String getVideos() 
    {
        return videos;
    }
    public void setMarketTitle(String marketTitle) 
    {
        this.marketTitle = marketTitle;
    }

    public String getMarketTitle() 
    {
        return marketTitle;
    }
    public void setMarketSubtitle(String marketSubtitle) 
    {
        this.marketSubtitle = marketSubtitle;
    }

    public String getMarketSubtitle() 
    {
        return marketSubtitle;
    }
    public void setTags(String tags) 
    {
        this.tags = tags;
    }

    public String getTags() 
    {
        return tags;
    }
    public void setKeywords(String keywords) 
    {
        this.keywords = keywords;
    }

    public String getKeywords() 
    {
        return keywords;
    }
    public void setBaseDailyRent(BigDecimal baseDailyRent) 
    {
        this.baseDailyRent = baseDailyRent;
    }

    public BigDecimal getBaseDailyRent() 
    {
        return baseDailyRent;
    }
    public void setBaseDeposit(BigDecimal baseDeposit) 
    {
        this.baseDeposit = baseDeposit;
    }

    public BigDecimal getBaseDeposit() 
    {
        return baseDeposit;
    }
    public void setMinRentDays(Long minRentDays) 
    {
        this.minRentDays = minRentDays;
    }

    public Long getMinRentDays() 
    {
        return minRentDays;
    }
    public void setMaxRentDays(Long maxRentDays) 
    {
        this.maxRentDays = maxRentDays;
    }

    public Long getMaxRentDays() 
    {
        return maxRentDays;
    }
    public void setDiscountRules(String discountRules) 
    {
        this.discountRules = discountRules;
    }

    public String getDiscountRules() 
    {
        return discountRules;
    }
    public void setBuyPrice(BigDecimal buyPrice) 
    {
        this.buyPrice = buyPrice;
    }

    public BigDecimal getBuyPrice() 
    {
        return buyPrice;
    }
    public void setIsBuyable(Integer isBuyable) 
    {
        this.isBuyable = isBuyable;
    }

    public Integer getIsBuyable() 
    {
        return isBuyable;
    }
    public void setTotalStock(Long totalStock) 
    {
        this.totalStock = totalStock;
    }

    public Long getTotalStock() 
    {
        return totalStock;
    }
    public void setAvailableStock(Long availableStock) 
    {
        this.availableStock = availableStock;
    }

    public Long getAvailableStock() 
    {
        return availableStock;
    }
    public void setReservedStock(Long reservedStock) 
    {
        this.reservedStock = reservedStock;
    }

    public Long getReservedStock() 
    {
        return reservedStock;
    }
    public void setMinStockAlert(Long minStockAlert) 
    {
        this.minStockAlert = minStockAlert;
    }

    public Long getMinStockAlert() 
    {
        return minStockAlert;
    }
    public void setStatus(Integer status) 
    {
        this.status = status;
    }

    public Integer getStatus() 
    {
        return status;
    }
    public void setSaleStatus(Integer saleStatus) 
    {
        this.saleStatus = saleStatus;
    }

    public Integer getSaleStatus() 
    {
        return saleStatus;
    }
    public void setAuditStatus(Integer auditStatus) 
    {
        this.auditStatus = auditStatus;
    }

    public Integer getAuditStatus() 
    {
        return auditStatus;
    }
    public void setDeliveryMethods(String deliveryMethods) 
    {
        this.deliveryMethods = deliveryMethods;
    }

    public String getDeliveryMethods() 
    {
        return deliveryMethods;
    }
    public void setServiceAreas(String serviceAreas) 
    {
        this.serviceAreas = serviceAreas;
    }

    public String getServiceAreas() 
    {
        return serviceAreas;
    }
    public void setAfterSalesService(String afterSalesService) 
    {
        this.afterSalesService = afterSalesService;
    }

    public String getAfterSalesService() 
    {
        return afterSalesService;
    }
    public void setInsuranceInfo(String insuranceInfo) 
    {
        this.insuranceInfo = insuranceInfo;
    }

    public String getInsuranceInfo() 
    {
        return insuranceInfo;
    }
    public void setQualityGrade(String qualityGrade) 
    {
        this.qualityGrade = qualityGrade;
    }

    public String getQualityGrade() 
    {
        return qualityGrade;
    }
    public void setWarrantyPeriod(Long warrantyPeriod) 
    {
        this.warrantyPeriod = warrantyPeriod;
    }

    public Long getWarrantyPeriod() 
    {
        return warrantyPeriod;
    }
    public void setMaintenanceCycle(Long maintenanceCycle) 
    {
        this.maintenanceCycle = maintenanceCycle;
    }

    public Long getMaintenanceCycle() 
    {
        return maintenanceCycle;
    }
    public void setViewCount(Long viewCount) 
    {
        this.viewCount = viewCount;
    }

    public Long getViewCount() 
    {
        return viewCount;
    }
    public void setOrderCount(Long orderCount) 
    {
        this.orderCount = orderCount;
    }

    public Long getOrderCount() 
    {
        return orderCount;
    }
    public void setRentCount(Long rentCount) 
    {
        this.rentCount = rentCount;
    }

    public Long getRentCount() 
    {
        return rentCount;
    }
    public void setFavoriteCount(Long favoriteCount) 
    {
        this.favoriteCount = favoriteCount;
    }

    public Long getFavoriteCount() 
    {
        return favoriteCount;
    }
    public void setAvgRating(BigDecimal avgRating) 
    {
        this.avgRating = avgRating;
    }

    public BigDecimal getAvgRating() 
    {
        return avgRating;
    }
    public void setReviewCount(Long reviewCount) 
    {
        this.reviewCount = reviewCount;
    }

    public Long getReviewCount() 
    {
        return reviewCount;
    }
    public void setSupplierId(Long supplierId) 
    {
        this.supplierId = supplierId;
    }

    public Long getSupplierId() 
    {
        return supplierId;
    }
    public void setSupplierName(String supplierName) 
    {
        this.supplierName = supplierName;
    }

    public String getSupplierName() 
    {
        return supplierName;
    }
    public void setSupplierProductCode(String supplierProductCode) 
    {
        this.supplierProductCode = supplierProductCode;
    }

    public String getSupplierProductCode() 
    {
        return supplierProductCode;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("productId", getProductId())
            .append("productCode", getProductCode())
            .append("productName", getProductName())
            .append("categoryId", getCategoryId())
            .append("brand", getBrand())
            .append("model", getModel())
            .append("productType", getProductType())
            .append("specifications", getSpecifications())
            .append("description", getDescription())
            .append("features", getFeatures())
            .append("mainImage", getMainImage())
            .append("images", getImages())
            .append("videos", getVideos())
            .append("marketTitle", getMarketTitle())
            .append("marketSubtitle", getMarketSubtitle())
            .append("tags", getTags())
            .append("keywords", getKeywords())
            .append("baseDailyRent", getBaseDailyRent())
            .append("baseDeposit", getBaseDeposit())
            .append("minRentDays", getMinRentDays())
            .append("maxRentDays", getMaxRentDays())
            .append("discountRules", getDiscountRules())
            .append("buyPrice", getBuyPrice())
            .append("isBuyable", getIsBuyable())
            .append("totalStock", getTotalStock())
            .append("availableStock", getAvailableStock())
            .append("reservedStock", getReservedStock())
            .append("minStockAlert", getMinStockAlert())
            .append("status", getStatus())
            .append("saleStatus", getSaleStatus())
            .append("auditStatus", getAuditStatus())
            .append("deliveryMethods", getDeliveryMethods())
            .append("serviceAreas", getServiceAreas())
            .append("afterSalesService", getAfterSalesService())
            .append("insuranceInfo", getInsuranceInfo())
            .append("qualityGrade", getQualityGrade())
            .append("warrantyPeriod", getWarrantyPeriod())
            .append("maintenanceCycle", getMaintenanceCycle())
            .append("viewCount", getViewCount())
            .append("orderCount", getOrderCount())
            .append("rentCount", getRentCount())
            .append("favoriteCount", getFavoriteCount())
            .append("avgRating", getAvgRating())
            .append("reviewCount", getReviewCount())
            .append("supplierId", getSupplierId())
            .append("supplierName", getSupplierName())
            .append("supplierProductCode", getSupplierProductCode())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .toString();
    }
}
